package com.mjf.day2

import org.apache.flink.streaming.api.scala._

/**
 * 分布式转换算子
 *    随机:
 *      shuffle
 *    轮询：
 *      rebalance
 *      rescale
 */
object RedistributeExample {
  def main(args: Array[String]): Unit = {

    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)

    val stream: DataStream[SensorReading] = env.addSource(new SensorSource)

    // 随机将数据打散到不同的分区(random)
    stream.shuffle

    // 轮询的将数据分配到不同的分区(round-robin)
    // 使用负载均衡算法，会将输入流平均的分配到随后的所有并行任务中去
    stream.rebalance
    // 与rebalance不同的点是，rebalance会平均分配到所有并行任务中，而rescale会平均的分配到部分的并行应用中
    stream.rescale

    env.execute("RedistributeExample")

  }
}
